package com.ninetaildemonfox.zdl.socialproject.mvp.presenter;

import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Toast;

import com.alipay.sdk.app.PayTask;
import com.google.gson.JsonObject;
import com.hyphenate.easeui.utils.map.JSONUtils;
import com.kongzue.dialog.interfaces.OnDialogButtonClickListener;
import com.kongzue.dialog.util.BaseDialog;
import com.kongzue.dialog.v3.MessageDialog;
import com.ninetaildemonfox.zdl.socialproject.R;
import com.ninetaildemonfox.zdl.socialproject.config.Constants;
import com.ninetaildemonfox.zdl.socialproject.http.https.Model;
import com.ninetaildemonfox.zdl.socialproject.mvp.contract.VipContract;
import com.ninetaildemonfox.zdl.socialproject.utils.ToastUtil;
import com.ninetaildemonfox.zdl.socialproject.wxapi.PayResult;
import com.tencent.mm.opensdk.modelpay.PayReq;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

import java.util.Map;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

/**
 * 创建人： Nine tails fox
 * 创建时间： 2019/8/5
 * 功能描述：
 * 联系方式：1037438704@qq.com
 *
 * @author NineTailDemonFox
 */

public class VipPresenter {
    private VipContract vipContract;
    private AppCompatActivity me;
    private int SDK_PAY_FLAG = 1;
    private String order_code = "";


    @SuppressLint("HandlerLeak")
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 1) {
                if (order_code != null) {
                    PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                    /**
                     * 对于支付结果，请商户依赖服务端的异步通知结果。同步通知结果，仅作为支付结束的通知。
                     */
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                    String resultStatus = payResult.getResultStatus();
                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, "9000")) {
                        // 该笔订单是否真实支付成功，需要依赖服务端的异步通知。
                        me.finish();
                    } else {
                        // 该笔订单真实的支付结果，需要依赖服务端的异步通知。
                        ToastUtil.show("取消支付了");
                    }
                }

            }
        }
    };

    public VipPresenter(VipContract vipContract) {
        this.vipContract = vipContract;

    }

    public VipPresenter(VipContract vipContract, AppCompatActivity me) {
        this.vipContract = vipContract;
        this.me = me;
    }

    public void getMealList(String token) {
        Model.getInstance()
                .getUserApi()
                .getMealList(token)
                .enqueue(new Callback<JsonObject>() {
                    @Override
                    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
                        Map<String, String> map = Constants.codeGet(me, response);
                        if (map == null) {
                            return;
                        }
                        vipContract.Success(map);
                    }

                    @Override
                    public void onFailure(Call<JsonObject> call, Throwable t) {

                    }
                });
    }


    public void balancePay(final String token, String member_id, String type, String money, String meal_id) {
//        token	用户 token	否	文本	未提供
//        member_id	对方用户id 【type=1,3,4时】 选填	否	文本	未提供
//        type	1聊天或查看社交账号 2发布动态 4解锁相册 5开通会员	否	文本	未提供
//        money	金额	否	文本	未提供
//        meal_id	套餐id 【type=5时】 选填
        Model.getInstance().getUserApi().balancePay(token, member_id, type, money, meal_id)
                .enqueue(new Callback<JsonObject>() {
                    @Override
                    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
                        Map<String, String> map = Constants.codeGet(me, response);
                        if (map == null) {
                            return;
                        }
                        MessageDialog.show(me
                                , "提示"
                                , map.get("message")
                                , "知道了").setOkButton(new OnDialogButtonClickListener() {
                            @Override
                            public boolean onClick(BaseDialog baseDialog, View v) {
                                me.finish();
                                return false;
                            }
                        });
                    }

                    @Override
                    public void onFailure(Call<JsonObject> call, Throwable t) {

                    }
                });
    }

    public void wxPay(final String token, String member_id, String type, String money, String meal_id) {
//        token	用户 token	否	文本	未提供
//        member_id	对方用户id 【type=1,3,4时】 选填	否	文本	未提供
//        type	1聊天或查看社交账号 2发布动态 4解锁相册 5开通会员	否	文本	未提供
//        money	金额	否	文本	未提供
//        meal_id	套餐id 【type=5时】 选填
        Model.getInstance().getUserApi().wxPay(token, money, type, member_id, meal_id)
                .enqueue(new Callback<JsonObject>() {
                    @Override
                    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
                        Map<String, String> map = Constants.codeGet(me, response);
                        if (map == null) {
                            return;
                        }
                        Map<String, String> data = JSONUtils.parseKeyAndValueToMap(map.get("data"));
                        if (data == null) {
                            return;
                        }
                        IWXAPI api = WXAPIFactory.createWXAPI(me, null);
                        api.registerApp(data.get("appid"));
                        PayReq req = new PayReq();
                        req.appId = data.get("appid");//你的微信appid
                        req.partnerId = data.get("partnerid");//商户号
                        req.prepayId = data.get("prepayid");
                        ;//预支付交易会话ID
                        req.nonceStr = data.get("noncestr");
                        ;//随机字符串
                        req.timeStamp = data.get("timestamp");
                        ;//时间戳
                        req.packageValue = data.get("package");//扩展字段,这里固定填写Sign=WXPay
                        req.sign = data.get("sign");
                        ;//签名
                        // 在支付之前，如果应用没有注册到微信，应该先调用IWXMsg.registerApp将应用注册到微信
                        api.sendReq(req);
                    }

                    @Override
                    public void onFailure(Call<JsonObject> call, Throwable t) {

                    }
                });
    }

    public void aliPay(final String token, String member_id, String type, String money, String meal_id) {
//        token	用户 token	否	文本	未提供
//        member_id	对方用户id 【type=1,3,4时】 选填	否	文本	未提供
//        type	1聊天或查看社交账号 2发布动态 4解锁相册 5开通会员	否	文本	未提供
//        money	金额	否	文本	未提供
//        meal_id	套餐id 【type=5时】 选填
        Model.getInstance().getUserApi().aliPay(token, money, type, member_id, meal_id)
                .enqueue(new Callback<JsonObject>() {
                    @Override
                    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
                        Map<String, String> map = Constants.codeGet(me, response);
                        if (map == null) {
                            return;
                        }
                        Map<String, String> data = JSONUtils.parseKeyAndValueToMap(map.get("data"));
                        if (data == null) {
                            return;
                        }
                        order_code = data.get("order_code");
                        final String pay_string = data.get("pay_string");
                        new Thread() {
                            @Override
                            public void run() {
                                super.run();
                                PayTask alipay = new PayTask(me);
                                Map<String, String> result = alipay.payV2(pay_string, true);

                                Message msg = new Message();
                                msg.what = SDK_PAY_FLAG;
                                msg.obj = result;
                                handler.sendMessage(msg);
                            }
                        }.start();


                    }

                    @Override
                    public void onFailure(Call<JsonObject> call, Throwable t) {

                    }
                });
    }

}
